//#include<iostream>
//using namespace std;
//class A
//{
//public:
//	A(int a = 0)
//		:_a(a)
//	{
//		cout << "A()" << "-" << this << endl;
//	}
//	~A()
//	{
//		cout << "~A()" << "-" << this << endl;
//	}
//	void Print()
//	{
//		cout << &_a << endl;
//	}
//private:
//	int _a;
//};
//int main()
//{
//	//自定义类型
//	// malloc/free
//	A* p1 = (A*)malloc(sizeof(A));
//	free(p1);
//	// new/delete
//	A* p2 = new A(1);
//	delete p2;
//	//new/delete 和malloc/free 最大的区别就是 new/delete对自定义类型，除了会开辟空间还会调用它的构造函数和析构函数
//
//	//内置类型
//	// malloc/free
//	int* p3 = (int*)malloc(sizeof(int));
//	free(p3);
//	// new/delete
//	int* p4 = new int;
//	delete p4;
//
//	A* p5 = (A*)malloc(sizeof(A) * 10);
//	free(p5);
//	A* p6 = new A[10]{ 1,2,3,4,5,6,7,8,9,10 };
//	delete p6;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//struct ListNode
//{
//	ListNode* _next;
//	int _val;
//	ListNode(int val)
//		:_next(nullptr)
//		,_val(val)
//	{
//		/*cout << "ListNode()" << _val << endl;*/
//	}
//};
//
//// 创的不带哨兵位
//ListNode* CreateList(int n)
//{
//	ListNode head(-1);
//	ListNode* tail = &head;
//	int val;
//	printf("请输入%d个结点的值:>", n);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> val;
//		tail->_next = new ListNode(val);
//		tail = tail->_next;
//	}
//	return head._next;
//}
//
//struct ListNode* CreateListNode(int val)
//{
//	struct ListNode* NewNode = (struct ListNode*)malloc(sizeof(struct ListNode));
//	if (NewNode == NULL)
//	{
//		perror("malloc fail");
//		exit(-1);
//	}
//	NewNode->_next = NULL;
//	NewNode->_val = val;
//	return NewNode;
//}
//int main()
//{
//	// 自定义类型，开空间+构造函数
//	//ListNode* node1 = new ListNode(1);
//	//ListNode* node2 = new ListNode(2);
//	//ListNode* node3 = new ListNode(3);
//
//	ListNode* list1 = CreateList(5);
//
//	return 0;
//}


#include<iostream>
using namespace std;
template<typename T>
void Swap(T& x, T& y)
{
	T tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int a = 1, b = 2;
	Swap(a, b);

	double d1 = 1.1, d2 = 2.2;
	Swap(d1, d2);

	return 0;
}